import { activeEffect } from "./effect";
import { track } from "./reactiveEffect";

export enum ReactiveFlags {
  IS_REACTIVE = "__v_isReactive",
}

// Proxy需要搭配Reflect来使用，Reflect可以在代码执行的时候修改代码的一些行为，翻译为反射
export const mutableHandler: ProxyHandler<any> = {
  get(target, key, receiver) {
    if (key === ReactiveFlags.IS_REACTIVE) {
      return true;
    }
    // 当取值的时候，应该让响应式属性和和effect映射
    // 依赖收集
    track(target,key) // 收集这个对象上的这个属性和effect关联在一起
    return Reflect.get(target, key, receiver);
  },
  set(target, key, value, receiver) {
    // 找到属性，让对应的effect重新执行

    // 触发更新 todo
    return Reflect.set(target, key, value, receiver);
  },
};

// const person = {
//   name: "nine",
//   get aliasName() {
//     return this.name + " handsome";
//   },
// };

// const proxyPerson = new Proxy(person, {
//   // 使用Proxy的时候要搭配Reflect使用
//   get(target, key, receiver) {
//     // receiver是代理对象
//     console.log("key:", key);
//     return Reflect.get(target, key, receiver);
//   },
// });
// console.log(proxyPerson.aliasName);
